package com.sqlcheck.service;

import com.sqlcheck.dto.request.LLMOptimizeRequest;
import com.sqlcheck.dto.response.LLMConfigResponse;
import com.sqlcheck.dto.response.LLMOptimizationResult;

import java.util.concurrent.CompletableFuture;

/**
 * 大模型优化服务接口
 */
public interface LLMOptimizationService {

    /**
     * 执行SQL优化
     * @param request 优化请求
     * @param userId 用户ID
     * @param requestIp 请求IP
     * @param userAgent 用户代理
     * @return 优化结果
     */
    LLMOptimizationResult optimizeSql(LLMOptimizeRequest request, Long userId, String requestIp, String userAgent);

    /**
     * 异步执行SQL优化
     * @param request 优化请求
     * @param userId 用户ID
     * @return 异步任务ID
     */
    CompletableFuture<LLMOptimizationResult> optimizeSqlAsync(LLMOptimizeRequest request, Long userId);

    /**
     * 获取大模型配置信息
     * @param userId 用户ID
     * @return 配置响应
     */
    LLMConfigResponse getLLMConfig(Long userId);

    /**
     * 测试大模型连接
     * @param request 测试请求
     * @return 测试结果
     */
    boolean testLLMConnection(LLMOptimizeRequest.LLMConfig request);

    /**
     * 检查用户使用限制
     * @param userId 用户ID
     * @return 是否可以使用
     */
    boolean checkUsageLimit(Long userId);

    /**
     * 获取用户今日使用量
     * @param userId 用户ID
     * @return 今日使用次数
     */
    int getTodayUsage(Long userId);
}